﻿using Gargoyle.Roton;
using System;
using System.Collections.Generic;
using System.Text;

namespace Gargoyle.ZZT
{
    static class ElementPresets
    {
        public static Element Ammo()
        {
            return new Element(
                ElementID.Ammo,
                132,
                3,
                false,
                true,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Ammo,
                1,
                65,
                "Ammo",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Bear()
        {
            return new Element(
                ElementID.Bear,
                153,
                6,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                3,
                Act.Bear,
                Interact.GenericEnemy,
                2,
                66,
                "Bear",
                "Creatures:",
                "Sensitivity?",
                "",
                "",
                "",
                "",
                "",
                1
            );
        }

        public static Element BearSuperZZT()
        {
            return new Element(
                ElementID.Bear,
                235,
                2,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                3,
                Act.Bear,
                Interact.GenericEnemy,
                2,
                66,
                "Bear",
                "Creatures:",
                "Sensitivity?",
                "",
                "",
                "",
                "",
                "",
                1
            );
        }

        public static Element BlackText()
        {
            return new Element(ElementID.BlackText);
        }

        public static Element BlinkRayH()
        {
            return new Element(
                ElementID.BlinkRayH,
                205,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                null,
                0,
                0,
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element BlinkRayV()
        {
            return new Element(
                ElementID.BlinkRayV,
                186,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                null,
                0,
                0,
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element BlinkWall()
        {
            return new Element(
                ElementID.BlinkWall,
                206,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.BlinkWall,
                1,
                Act.BlinkWall,
                null,
                3,
                76,
                "Blink wall",
                "",
                "Starting time",
                "Period",
                "",
                "",
                "Wall direction",
                "",
                0
            );
        }

        public static Element BlinkWallSuperZZT()
        {
            return new Element(
                ElementID.BlinkWall,
                206,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.BlinkWall,
                1,
                Act.BlinkWall,
                null,
                3,
                88,
                "Blink wall",
                "",
                "Starting time",
                "Period",
                "",
                "",
                "Wall direction",
                "",
                0
            );
        }

        public static Element BlueText()
        {
            return new Element(ElementID.BlueText);
        }

        public static Element BoardEdge()
        {
            return new Element(
                ElementID.BoardEdge,
                32,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.BoardEdge,
                0,
                0,
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Bomb()
        {
            return new Element(
                ElementID.Bomb,
                11,
                255,
                false,
                true,
                false,
                false,
                false,
                true,
                Draw.Bomb,
                6,
                Act.Bomb,
                Interact.Bomb,
                1,
                66,
                "Bomb",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Boulder()
        {
            return new Element(
                ElementID.Boulder,
                254,
                255,
                false,
                true,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.GenericPushable,
                3,
                79,
                "Boulder",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Breakable()
        {
            return new Element(
                ElementID.Breakable,
                177,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                null,
                3,
                66,
                "Breakable",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element BrownText()
        {
            return new Element(ElementID.BrownText);
        }

        public static Element Bullet()
        {
            return new Element(
                ElementID.Bullet,
                248,
                15,
                true,
                false,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Bullet,
                Interact.GenericEnemy,
                0,
                0,
                "Bullet",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Clockwise()
        {
            return new Element(
                ElementID.Clockwise,
                47,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Clockwise,
                3,
                Act.Clockwise,
                null,
                1,
                49,
                "Clockwise",
                "Conveyors:",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Counter()
        {
            return new Element(
                ElementID.Counter,
                92,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Counter,
                2,
                Act.Counter,
                null,
                1,
                50,
                "Counter",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element CyanText()
        {
            return new Element(ElementID.CyanText);
        }

        public static Element Door()
        {
            return new Element(
                ElementID.Door,
                10,
                254,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Door,
                1,
                68,
                "Door",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element DragonPup()
        {
            return new Element(
                ElementID.DragonPup,
                237,
                4,
                true,
                true,
                false,
                false,
                false,
                true,
                Draw.DragonPup,
                2,
                Act.DragonPup,
                Interact.GenericEnemy,
                4,
                68,
                "Dragon Pup",
                "",
                "Intelligence?",
                "Switch Rate?",
                "",
                "",
                "",
                "",
                1
            );
        }

        public static Element Duplicator()
        {
            return new Element(
                ElementID.Duplicator,
                250,
                15,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Duplicator,
                2,
                Act.Duplicator,
                null,
                1,
                85,
                "Duplicator",
                "",
                "",
                "Duplication rate?;SF",
                "",
                "",
                "Source direction?",
                "",
                0
            );
        }

        public static Element Empty()
        {
            return new Element(
                ElementID.Empty,
                32,
                112,
                false,
                true,
                false,
                false,
                true,
                false,
                null,
                -1,
                null,
                null,
                0,
                0,
                "Empty",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Energizer()
        {
            return new Element(
                ElementID.Energizer,
                127,
                5,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Energizer,
                1,
                69,
                "Energizer",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Fake()
        {
            return new Element(
                ElementID.Fake,
                178,
                255,
                false,
                false,
                false,
                true,
                true,
                false,
                null,
                -1,
                null,
                Interact.Fake,
                3,
                65,
                "Fake",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Floor()
        {
            return new Element(
                ElementID.Floor,
                176,
                255,
                false,
                false,
                false,
                true,
                true,
                false,
                null,
                -1,
                null,
                null,
                5,
                70,
                "Floor",
                "Terrains:",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Forest()
        {
            return new Element(
                ElementID.Forest,
                176,
                32,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Forest,
                3,
                70,
                "Forest",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Gem()
        {
            return new Element(
                ElementID.Gem,
                4,
                255,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Gem,
                1,
                71,
                "Gem",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element GreenText()
        {
            return new Element(ElementID.GreenText);
        }

        public static Element Head()
        {
            return new Element(
                ElementID.Head,
                233,
                255,
                true,
                false,
                false,
                false,
                false,
                false,
                null,
                2,
                Act.Head,
                Interact.GenericEnemy,
                2,
                72,
                "Head",
                "Centipedes",
                "Intelligence?",
                "Deviance?",
                "",
                "",
                "",
                "",
                1
            );
        }

        public static Element Invisible()
        {
            return new Element(
                ElementID.Invisible,
                176,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Invisible,
                3,
                73,
                "Invisible",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Key()
        {
            return new Element(
                ElementID.Key,
                12,
                255,
                false,
                true,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Key,
                1,
                75,
                "Key",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Lava()
        {
            return new Element(
                ElementID.Water,
                111,
                78,
                false,
                false,
                true,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Water,
                3,
                76,
                "Lava",
                "Terrains:",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Line()
        {
            return new Element(
                ElementID.Line,
                206,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Line,
                -1,
                null,
                null,
                0,
                0,
                "Line",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Lion()
        {
            return new Element(
                ElementID.Lion,
                234,
                12,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                2,
                Act.Lion,
                Interact.GenericEnemy,
                2,
                76,
                "Lion",
                "Beasts:",
                "Intelligence?",
                "",
                "",
                "",
                "",
                "",
                1
            );
        }

        public static Element Messenger()
        {
            return new Element(
                ElementID.Messenger,
                32,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                Act.Messenger,
                null,
                0,
                0,
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Monitor()
        {
            return new Element(
                ElementID.Monitor,
                32,
                7,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Monitor,
                null,
                0,
                0,
                "Monitor",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element MonitorSuperZZT()
        {
            return new Element(
                ElementID.Monitor,
                2,
                31,
                false,
                true,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Monitor,
                null,
                0,
                0,
                "Monitor",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element None()
        {
            return new Element(ElementID.None);
        }

        public static Element Normal()
        {
            return new Element(
                ElementID.Normal,
                178,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                null,
                3,
                78,
                "Normal",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Object()
        {
            return new Element(
                ElementID.Object,
                2,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Object,
                3,
                Act.Object,
                Interact.Object,
                2,
                79,
                "Object",
                "",
                "Character?",
                "",
                "",
                "",
                "",
                "Edit Program",
                0
            );
        }

        public static Element Pairer()
        {
            return new Element(
                ElementID.Pairer,
                229,
                1,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                2,
                Act.Pairer,
                Interact.GenericEnemy,
                4,
                80,
                "Pairer",
                "",
                "Intelligence?",
                "",
                "",
                "",
                "",
                "",
                2
            );
        }

        public static Element Passage()
        {
            return new Element(
                ElementID.Passage,
                240,
                254,
                false,
                false,
                true,
                false,
                false,
                false,
                null,
                0,
                null,
                Interact.Passage,
                1,
                80,
                "Passage",
                "",
                "",
                "",
                "",
                "Room thru passage?",
                "",
                "",
                0
            );
        }

        public static Element Player()
        {
            return new Element(
                ElementID.Player,
                2,
                31,
                true,
                true,
                true,
                false,
                false,
                false,
                null,
                1,
                Act.Player,
                null,
                1,
                90,
                "Player",
                "Items:",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element PurpleText()
        {
            return new Element(ElementID.PurpleText);
        }

        public static Element Pusher()
        {
            return new Element(
                ElementID.Pusher,
                16,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Pusher,
                4,
                Act.Pusher,
                null,
                2,
                80,
                "Pusher",
                "",
                "",
                "",
                "",
                "",
                "Push direction?",
                "",
                0
            );
        }

        public static Element RedText()
        {
            return new Element(ElementID.RedText);
        }

        public static Element Ricochet()
        {
            return new Element(
                ElementID.Ricochet,
                42,
                10,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                null,
                3,
                82,
                "Ricochet",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Roton()
        {
            return new Element(
                ElementID.Roton,
                148,
                13,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Roton,
                Interact.GenericEnemy,
                4,
                82,
                "Roton",
                "Uglies:",
                "Intelligence?",
                "Switch Rate?",
                "",
                "",
                "",
                "",
                2
            );
        }

        public static Element Ruffian()
        {
            return new Element(
                ElementID.Ruffian,
                5,
                13,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Ruffian,
                Interact.GenericEnemy,
                2,
                82,
                "Ruffian",
                "",
                "Intelligence?",
                "Resting time?",
                "",
                "",
                "",
                "",
                2
            );
        }

        public static Element Scroll()
        {
            return new Element(
                ElementID.Scroll,
                232,
                15,
                false,
                true,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Scroll,
                Interact.Scroll,
                1,
                83,
                "Scroll",
                "",
                "",
                "",
                "",
                "",
                "",
                "Edit text of scroll",
                0
            );
        }

        public static Element Segment()
        {
            return new Element(
                ElementID.Segment,
                79,
                255,
                true,
                false,
                false,
                false,
                false,
                false,
                null,
                2,
                Act.Segment,
                Interact.GenericEnemy,
                2,
                83,
                "Segment",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                3
            );
        }

        public static Element Shark()
        {
            return new Element(
                ElementID.Shark,
                94,
                7,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                3,
                Act.Shark,
                null,
                2,
                89,
                "Shark",
                "",
                "Intelligence?",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element SliderEW()
        {
            return new Element(
                ElementID.SliderEW,
                29,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.GenericPushable,
                3,
                50,
                "Slider (EW)",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element SliderNS()
        {
            return new Element(
                ElementID.SliderNS,
                18,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.GenericPushable,
                3,
                49,
                "Slider (NS)",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Slime()
        {
            return new Element(
                ElementID.Slime,
                42,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                3,
                Act.Slime,
                Interact.Slime,
                2,
                86,
                "Slime",
                "",
                "",
                "Movement speed?;FS",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Solid()
        {
            return new Element(
                ElementID.Solid,
                219,
                255,
                false,
                false,
                false,
                false,
                false,
                false,
                null,
                -1,
                null,
                null,
                3,
                83,
                "Solid",
                "Walls:",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Spider()
        {
            return new Element(
                ElementID.Spider,
                15,
                255,
                true,
                false,
                false,
                false,
                false,
                false,
                null,
                1,
                Act.Spider,
                Interact.GenericEnemy,
                4,
                83,
                "Spider",
                "",
                "Intelligence?",
                "",
                "",
                "",
                "",
                "",
                3
            );
        }

        public static Element SpinningGun()
        {
            return new Element(
                ElementID.SpinningGun,
                24,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.SpinningGun,
                2,
                Act.SpinningGun,
                null,
                2,
                71,
                "Spinning gun",
                "",
                "Intelligence?",
                "Firing rate?",
                "Firing type?",
                "",
                "",
                "",
                0
            );
        }

        public static Element Star()
        {
            return new Element(
                ElementID.Star,
                83,
                15,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Star,
                1,
                Act.Star,
                Interact.GenericEnemy,
                0,
                0,
                "Star",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Stone()
        {
            return new Element(
                ElementID.Stone,
                90,
                15,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Stone,
                1,
                Act.Stone,
                Interact.Stone,
                5,
                90,
                "Stone",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Tiger()
        {
            return new Element(
                ElementID.Tiger,
                227,
                11,
                true,
                true,
                false,
                false,
                false,
                false,
                null,
                2,
                Act.Tiger,
                Interact.GenericEnemy,
                2,
                84,
                "Tiger",
                "",
                "Intelligence",
                "Firing rate?",
                "Firing type?",
                "",
                "",
                "",
                2
            );
        }

        public static Element Torch()
        {
            return new Element(
                ElementID.Torch,
                157,
                6,
                false,
                false,
                true,
                false,
                false,
                false,
                null,
                -1,
                null,
                Interact.Torch,
                1,
                84,
                "Torch",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Transporter()
        {
            return new Element(
                ElementID.Transporter,
                197,
                255,
                false,
                false,
                false,
                false,
                false,
                true,
                Draw.Transporter,
                2,
                Act.Transporter,
                Interact.Transporter,
                3,
                84,
                "Transporter",
                "",
                "",
                "",
                "",
                "",
                "Direction?",
                "",
                0
            );
        }

        public static Element Water()
        {
            return new Element(
                ElementID.Water,
                176,
                249,
                false,
                false,
                false,
                true,
                false,
                false,
                null,
                -1,
                null,
                Interact.Water,
                3,
                87,
                "Water",
                "Terrains:",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element WaterE()
        {
            return new Element(
                ElementID.WaterE,
                16,
                25,
                false,
                false,
                false,
                true,
                true,
                false,
                null,
                -1,
                null,
                null,
                5,
                54,
                "Water E",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element WaterN()
        {
            return new Element(
                ElementID.WaterN,
                30,
                25,
                false,
                false,
                false,
                true,
                true,
                false,
                null,
                -1,
                null,
                null,
                5,
                56,
                "Water N",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element WaterS()
        {
            return new Element(
                ElementID.WaterS,
                31,
                25,
                false,
                false,
                false,
                true,
                true,
                false,
                null,
                -1,
                null,
                null,
                5,
                50,
                "Water S",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element WaterW()
        {
            return new Element(
                ElementID.WaterW,
                17,
                25,
                false,
                false,
                false,
                true,
                true,
                false,
                null,
                -1,
                null,
                null,
                5,
                52,
                "Water W",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

        public static Element Web()
        {
            return new Element(
                ElementID.Web,
                197,
                255,
                false,
                false,
                false,
                true,
                true,
                true,
                Draw.Web,
                -1,
                null,
                null,
                5,
                87,
                "Web",
                "",
                "",
                "",
                "",
                "",
                "",
                "",
                0
            );
        }

    }
}
